package com.blb.upload_service.util;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.IOException;
import java.io.InputStream;

/**
 * FTP上传工具类
 */
public class FtpUtil {

    /**
     *
     * @param host 主机
     * @param port 端口
     * @param username 账号
     * @param password 密码
     * @param basePath 基础路径
     * @param filename 文件名
     * @param inputStream 文件流
     * @return
     */
    public static boolean upload(String host, int port, String username, String password,
                                 String basePath, String filename, InputStream inputStream){
        FTPClient ftpClient = new FTPClient();
        try {
            //连接ftp服务器
            ftpClient.connect(host,port);
            //登录服务器
            ftpClient.login(username, password);
            int replyCode = ftpClient.getReplyCode();
            //判断登录结果
            if(!FTPReply.isPositiveCompletion(replyCode)){
                //如果没有正常登录
                ftpClient.disconnect();
                return false;
            }
            //切换目录
            if(ftpClient.changeWorkingDirectory(basePath)){
                //设置被动模式
                ftpClient.enterLocalPassiveMode();
                //设置上传文件类型为二进制
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                //上传
                if(ftpClient.storeFile(filename,inputStream)){
                    inputStream.close();
                    ftpClient.logout();
                    ftpClient.disconnect();
                    return true;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
}